package com.demo.example.proxy;

import java.lang.reflect.Proxy;

public class Client {
    public static void main(String[] args) {
        // 实例化被代理对象
        UserService targetInstance = new UserServiceImpl();

        // 获取被代理对象的类加载器，用作生成代理对象的必要参数
        ClassLoader classLoader = targetInstance.getClass().getClassLoader();
        
        // 获取被代理对象的实现接口，用作生成代理对象的必要参数
        // 方法映射就是基于这个参数实现的
        Class<?>[] interfaces = targetInstance.getClass().getInterfaces();

        // 获取被代理对象的增强主题类，用作生成代理对象的必要参数
        LogHandler logHandler = new LogHandler(targetInstance);

        // 生成代理对象的核心代码！！！！
        UserService proxyInstance = (UserService) Proxy.newProxyInstance(classLoader, interfaces, logHandler);

        // 使用代理对象执行方法
        proxyInstance.select();
        System.out.println();
        proxyInstance.update();
    }
}
